#include"RBTree.h"

namespace MySet{
    template<class K>
    class set{
        //内部类，用来获取set存储对象中的key值
        struct SetKeyOfT{
            const K& operator()(const K& key){
                return key;
            }
        };

    public:
        //这里的类模板还没有实例化对象，所以要加上关键字typename
        typedef typename RBTree<K,K,SetKeyOfT>::const_iterator iterator;
        typedef typename RBTree<K,K,SetKeyOfT>::const_iterator const_iterator;

        const_iterator begin()const {
            return _t.begin();
        }

        const_iterator end()const {
            return _t.end();
        }

        //这里返回的是const_iterator类型的迭代器
        pair<iterator,bool> insert(const K& key){
            //插入返回的是iterator类型的迭代器
            pair<typename RBTree<K,K,SetKeyOfT>::iterator,bool> ret=_t.insert(key);
            return pair<iterator,bool>(ret.first,ret.second);
        }

    private:
        //第一个模板参数k是set存储的数据类型
        RBTree<K,K,SetKeyOfT> _t;
    };
};